<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /**
    * 好比 rest 参数的逆运算 将【数组】转为以逗号分隔的【参数序列】
    *
    console.log(...[1, 2, 3])// 1 2 3
    console.log(1, ...[2, 3, 4], 5)// 1 2 3 4 5
    [...document.querySelectorAll('div')]// [<div>, <div>, <div>]
    */
    // 主要用于函数提调用
    function push(array, ...items) {
    array.push(...items);
    }
    function add(x, y) {
    return x + y;
    }
    const numbers = [4, 38];
    add(...numbers) // 42 ==> 该运算都是符将一个【数组】，变为参数序列

    // 1. 与正常函数参数结合：
    function f(v, w, x, y, z) { }
    const args = [0, 1];
    f(-1, ...args, 2, ...[3]); // -1, 0, 1, 2, 3;  ...args => 0, 1; ...[3] => 3

    // 2. 与表达式结合：
    const arr = [
    ...(x > 0 ? ['a'] : []), // x > 0?['a']:[] 我也不知道这有什么区别啊
    'b',
    ];
    /* 扩展运算符后时一个空数组 那么什么反应都没有 [...[], 1] => [ 1 ] */
    /*** 注意点：运算符如果放在括号内的话，JS会认为那是函数调用；如果不是，就会报错
    (...[1, 2]);  // Uncaught SyntaxError: Unexpected number
    console.log((...[1, 2]))
    console.log(...[1, 2])
    */
</script>
</body>
</html>